package modeloProducto;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.*;

import modeloDetalleCarro.DetalleCarro;

/**
 * Entidad de la tabla producto en base de datos con sus 
 * atributos correspondientes.
 *
 * @author Ronald Carroza.
 */
@Entity
@Table(name = "producto")
public class Producto implements Serializable {

    /**
     * Atributo necesario al implementar Serializable.
     */
    private static final long serialVersionUID = 1L;

    /**
     * Clave principal de la tabla producto e identificador.
     */
    @Id
    @Column(name = "COD_PRODUCTO")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    /**
     * Columna de tabla producto que contiene el nombre de estos.
     */
    @Column(name = "NOMBRE")
    private String nombre;

    /**
     * Atributo que almacena la descripcion del producto.
     */
    @Column(name = "DESCRIPCION")
    private String descrip;

    /**
     * Columna de tabla producto en la que se almacena el precio del cada uno.
     */
    @Column(name = "PRECIO")
    private int precio;

    /**
     * Atributo que contiene la cantidad disponible para la compra 
     * en la base de datos.
     */
    @Column(name = "CANTIDAD")
    private int stock;

    /**
     * Atributo que relaciona los id de producto en la clase DetalleCarro
     * con el id de producto y su contenido de la clase Producto.
     */
    @Transient
    @OneToMany(mappedBy = "idProd", cascade = CascadeType.ALL)
    private Set<DetalleCarro> detalle;

    //-----------------------------------------
    /**
     * Permite obtener el valor del atributo id.
     * 
     * @return el valor del atributo id.
     */
    public int getId() {
        return id;
    }

    /**
     * Permite cambiar el valor del atributo id.
     * 
     * @param id
     *            nuevo valor para el atributo id.
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * Permite obtener el valor del atributo nombre.
     * 
     * @return el valor del atributo nombre.
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Permite cambiar el valor del atributo nombre.
     * 
     * @param nombre
     *            nuevo valor para el atributo nombre.
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Permite obtener el valor del atributo descrip.
     * 
     * @return el valor del atributo descrip.
     */
    public String getDescrip() {
        return descrip;
    }

    /**
     * Permite cambiar el valor del atributo descrip.
     * 
     * @param descrip
     *            nuevo valor para el atributo descrip.
     */
    public void setDescrip(String descrip) {
        this.descrip = descrip;
    }

    /**
     * Permite obtener el valor del atributo precio.
     * 
     * @return el valor del atributo precio.
     */
    public int getPrecio() {
        return precio;
    }

    /**
     * Permite cambiar el valor del atributo precio.
     * 
     * @param precio
     *            nuevo valor para el atributo precio.
     */
    public void setPrecio(int precio) {
        this.precio = precio;
    }

    /**
     * Permite obtener el valor del atributo stock.
     * 
     * @return el valor del atributo stock.
     */
    public int getStock() {
        return stock;
    }

    /**
     * Permite cambiar el valor del atributo stock.
     * 
     * @param stock
     *            nuevo valor para el atributo stock.
     */
    public void setStock(int stock) {
        this.stock = stock;
    }

    /**
     * Permite obtener el valor del atributo detalle.
     * 
     * @return el valor del atributo detalle.
     */
    public Set<DetalleCarro> getDetalle() {
        return detalle;
    }

    /**
     * Permite cambiar el valor del atributo detalle.
     * 
     * @param detalle
     *            nuevo valor para el atributo detalle.
     */
    public void setDetalle(Set<DetalleCarro> detalle) {
        this.detalle = detalle;
    }

}
